//layui初始化表格模组
layui.use(['table'], function() {
	//获得模块对象
	var table = layui.table;
	var form = layui.form;
	var $ = layui.jquery;
	var layer = layui.layer;

	/*--------复制的代码 start-----------*/
	
	openModal({ //弹模态框调用方法模板（修改值即可）-----------layui.open({...})覆盖方法 开始
		modalId: 'manageSubareaModal', // 模态框id不用加 # 符号
		ajaxType: 'post', // ajax请求方式
		ajaxUrl: 'sys/org/add', // ajax请求地址
		ajaxAsync: true, // ajax是否异步请求
		reloadTabId: 'dataTable', // 刷新表数据的表 id 不用加 # 符号
		reloadTabUrl: 'sys/org/selectList', // 刷新表数据请求的url
		layOpen: { //把自己的layer.open({...})里面的东西复制进来
			type: 1, // 基本层类型0~4，1为页面层
			title: 'wwww', // 标题
			area: ['400px', '500px'], // 宽高 只写一个参数就是表示宽度，高度会自适应
			content: $("#manageSubareaModal"), // 文本、html都行
			anim: 0, // 弹出动画
			resize: false, // 是否允许拉伸
			btnAlign: 'c', //按钮居中
			//---------
			btn: ['立即提交', '关闭'] //就两个按钮不用附带函数（!--注意：这个必须有--!）
		},
		selectList: [{ //下拉框加载（没有可不要/删掉）
				selectId: 'parentId', // select的 id 不用加 # 符号
				selectUrl: 'sys/org/selectList', // select的 请求的url
				selectType: 'get', // select请求方式
				optionVal: 'orgId', // option的 value的数据字段
				optionTxt: 'orgName' // soption的请求的内容字段
			},
			{
				selectId: 'subsetName', // select的 id 不用加 # 符号
				selectUrl: 'sys/org/selectList', // select的 请求的url
				selectType: 'get', // select请求方式
				optionVal: 'subsetId', // option的 value的数据字段
				optionTxt: 'subsetName' // soption的请求的内容字段
			},
			{
				selectId: 'staffName', // select的 id 不用加 # 符号
				selectUrl: 'sys/org/selectList', // select的 请求的url
				selectType: 'get', // select请求方式
				optionVal: 'staffId', // option的 value的数据字段
				optionTxt: 'staffName' // soption的请求的内容字段
			}
		],
		ifOk: {
			funName: addOkFun, // 提交成功回调函数名（不能是数字和字符串也不能带括号，有模板函数fun1/自定义）
			parameter: {} // 传入提交成功回调函数的参数json
		},
		ifErr: {
			funName: addErrFun, // 提交失败回调函数名（不能是数字和字符串也不能带括号，有模板函数fun2/自定义）
			parameter: {} // 传入提交失败回调函数的参数json
		},
		modalFormVerify: { // 校验（无校验可不要/删掉,建议:写校验函数,！--注意：该上传非submit提交，layui的表单校验无效--！）
			funName: addVerifyFun, // 校验函数名（不能是数字和字符串也不能带括号，返回值必须是true才能提交，有模板函数fun3/自定义）
			parameter: {} // 传入校验函数的参数json
		}
	})//----------------------------------------layui.open({...})覆盖方法 结束
	
	
	
	// 提交成功回调函数模板----------------------自己改吧改吧
	function addOkFun(e) {
		if(e.respData == 1) {
			layer.closeAll();
			layer.msg("添加成功", {
				icon: 1, //图标，可输入范围0~6
				time: 2500 //2秒关闭（如果不配置，默认是3秒）
			});
		} else {
			layer.msg("添加失败，请重试！", {
				icon: 1, //图标，可输入范围0~6
				time: 2500 //2秒关闭（如果不配置，默认是3秒）
			});
		}
		table.reload('dataTable', {
			url: pageSelectUrl
		});
	}

	// 提交失败回调函数模板----------------------自己改吧改吧
	function addErrFun() {
		layer.msg("添加失败，请重试！", {
			icon: 1, //图标，可输入范围0~6
			time: 2500 //2秒关闭（如果不配置，默认是3秒）
		});
	}

	// 表单校验函数模板----------------------自己改吧改吧
	function addVerifyFun() {
		var verifyOkNum = 0; //定义校验通过数量

		//自定义校验方法（修改即可）根据元素中my-verify的值进行校验没有可以自己添加（跟layui的一样写法）
		myVerify({
			orgName: function(value) {
				if(!new RegExp("^[a-zA-Z0-9_\u4e00-\u9fa5\\s·]+$").test(value)) {
					return '组织名不能有特殊字符';
				} else if(/(^\_)|(\__)|(\_+$)/.test(value)) {
					return '组织名首尾不能出现下划线\'_\'';
				} else if(/^\d+\d+\d$/.test(value)) {
					return '组织名不能全为数字';
				}
				/* else if(从数据库查组织结构名函数的返回值（组织id） != 隐藏域里的组织结构id && 从数据库查组织结构名函数的返回值（组织id） != "") {
					return '该组织名已存在';
				}*/
				{
					verifyOkNum++;
					return null;
				}
			},
			orgLocation: function(value) {
				if(value != '') {
					verifyOkNum++;
					return null;
				} else {
					return "地址不能为空！";
				}
			}
		});
		//
		if(verifyOkNum == 2) { //当校验通过数量==要校验的数量时返回true
			return true;
		} else {
			return false;
		}
	}

	/*------------------打开模态框的主方法（放在layui.use(['table'], function() {}（必须要定义了var form = layui.form,layer = layui.layer,table = layui.table,$ = layui.jquery;）里面）不能私自修改，折叠起来-------------------------------------------------------------------*/
	function openModal(modalDatas) {
		if(typeof(modalDatas.selectList) !== 'undefined') {
			loadOption(modalDatas.selectList);
		}

		modalDatas.layOpen['btn1'] = function(index, layero) { //（btn1：‘立即提交’）   回调函数
			if(modalDatas.modalFormVerify != '' && typeof(modalDatas.modalFormVerify) !== 'undefined') {
				if(typeof(modalDatas.modalFormVerify.funName) === 'function' && modalDatas.modalFormVerify.funName(modalDatas.modalFormVerify.parameter) == true) {
					setModalAjaxData();
				} else {
					console.log('你的校验未通过！')
				}
			} else {
				setModalAjaxData();
			}
		};

		modalDatas.layOpen['btn2'] = function(index, layero) { //（btn2：‘关闭’） 回调函数
			//关闭页面上所有类型的所有弹框
			layer.closeAll();
		};

		modalDatas.layOpen['end'] = function() { // 弹出层销毁时的回调函数（不论何种方式，只要关闭了就执行）
			$("#" + modalDatas.modalId + " form")[0].reset();
			if(typeof(modalDatas.selectList) !== 'undefined') {
				claseOption(modalDatas.selectList); //在''里面填要清空的select的id
			}
		};

		layer.open(modalDatas.layOpen);

		function setModalAjaxData() {
			var formData = {};
			$.map($("#" + modalDatas.modalId + " form").serializeArray(), function(object, index) {
				formData[object['name']] = object['value'];
			});
			if(modalDatas.ajaxType == '' || typeof(modalDatas.ajaxType) === 'undefined') {
				modalDatas.ajaxType = 'post';
			}
			if(modalDatas.ajaxAsync == '' || typeof(modalDatas.ajaxAsync) === 'undefined') {
				modalDatas.ajaxAsync = true;
			}
			modalAjax({
				formData: formData,
				thisType: modalDatas.ajaxType,
				thisUrl: modalDatas.ajaxUrl,
				thisAsync: modalDatas.ajaxAsync,
				thisOkFun: {
					funName: modalDatas.ifOk.funName,
					parameter: modalDatas.ifOk.parameter
				},
				thisErrFun: {
					funName: modalDatas.ifErr.funName,
					parameter: modalDatas.ifErr.parameter
				}
			});
		}

		//提交表单函数
		function modalAjax(modalSubmitData) {
			$.ajax({
				type: modalSubmitData.thisType,
				url: modalSubmitData.thisUrl,
				async: modalSubmitData.ajaxAsync,
				data: modalSubmitData.formData,
				dataType: 'json',
				success: function(respData) {
					if(typeof(modalSubmitData.thisOkFun.funName) === 'function') {
						modalSubmitData.thisOkFun.funName({
							respData: respData,
							parameter: modalSubmitData.thisOkFun.parameter
						});
					}
				},
				error: function() {
					if(typeof(modalSubmitData.thisErrFun.funName) === 'function') {
						modalSubmitData.thisErrFun.funName(modalSubmitData.thisErrFun.parameter);
					}
				}
			});
		}

		function addOption(obj) {
			if(obj.respData != '' && typeof(obj.respData) != 'undefined') {
				$.each(obj.respData, function(index, o) {
					$("#" + modalDatas.modalId + " #" + obj.parameter.selectId).append(new Option(o[obj.parameter.optionTxt], o[obj.parameter.optionVal]));
				});
				form.render(); //渲染将option添加进去
			}
		}
		//清空select的option方法
		function claseOption(selectList) {
			if(typeof(selectList) !== 'undefined') {
				$.each(selectList, function(index, o) {
					if(o.selectId != '' && typeof(o.selectId) !== 'undefined') {
						$("#" + modalDatas.modalId + " #" + o.selectId).html("<option value=''></option>");
					}
				});
			}
		}

		function loadOptionErr() {
			layer.msg("请求超时，数据加载失败！", {
				icon: 5,
				time: 2500
			});
		}

		//清空select的option方法
		function loadOption(selectList) {
			$.each(selectList, function(index, o) {
				if(o.selectId != '' && typeof(o.selectId) != undefined) {
					if(o.selectType == '' || typeof(o.selectType) === 'undefined') {
						o.selectType = 'get';
					}
					modalAjax({
						formData: {},
						thisType: o.selectType,
						thisUrl: o.selectUrl,
						thisAsync: false,
						thisOkFun: {
							funName: addOption,
							parameter: o
						},
						thisErrFun: {
							funName: loadOptionErr
						}
					});
				}
			});
		}
	}
	/*------------------打开模态框的主方法（放在layui.use(['table'], function() {}（必须要定义了var form = layui.form,layer = layui.layer,table = layui.table,$ = layui.jquery;）里面）不能私自修改，折叠起来-------------------------------------------------------------------*/

	/*------------------自定义校验方法（调用即可，！--注意：不可私自修改--！）------------------------*/
	function myVerify(myVerifyData) { //自定义校验方法（调用即可，！--注意：折叠起来，不可私自修改--！）
		if(typeof(myVerifyData) !== 'undefined' && myVerifyData != '') {
			$.each(myVerifyData, function(name) {
				var myVerifyReturnVal = myVerifyData[name]($("input[my-verify=" + name + "]").val());
				if(myVerifyReturnVal != null && typeof(myVerifyReturnVal) !== 'undefined') {
					//"<div style='position: relative'><span style='color: red; font-size: 12px; position: absolute;'>"+$("input[my-verify=" + name + "]").val()+"</span></div>"
					$("input[my-verify=" + name + "]").css('border-color', 'rgb(255,87,34)');
					$("input[my-verify=" + name + "]").next().remove();
					$("input[my-verify=" + name + "]").parent().append("<div class='myVerifyErr' style='position: relative'><span style='color: red; font-size: 12px; position: absolute;'>" + myVerifyData[name]($("input[my-verify=" + name + "]").val()) + "</span></div>")
				}
			});
			setTimeout(removeMyVerifyErr, 2000);

			function removeMyVerifyErr() {
				$(".myVerifyErr").remove();
				$("form input[name!='button']").css('border-color', 'rgb(230,230,230)');
			}
		}
	}
	/*------------------自定义校验方法（调用即可，！--注意：不可私自修改--！）------------------------*/
	/*--------复制的代码  end-----------*/

});